import http from '@/axios'
import { handleSuccess, handleError } from '@/api'

/**
 * 案件申请相关API
 */
export const CaseApi = {
    /**
     * 获取案件列表
     * @param {Object} query - 查询参数
     * @param {Number} [query.page=1] - 当前页码
     * @param {Number} [query.pageSize=10] - 每页数量
     * @param {String} [query.caseName] - 案件名称
     * @param {String} [query.status] - 案件状态
     * @param {String} [query.caseType] - 案件类型
     * @returns {Promise} 案件列表Promise
     */
    getCaseList: (query) =>
        http.get('/getCasesList', { params: query })
            .then(res => handleSuccess(res, '获取案件列表成功'))
            .catch(error => handleError(
                error,
                '获取案件列表失败',
                '请检查查询条件或网络连接'
            )),

    /**
     * 获取案件详情
     * @param {String|Number} id - 案件ID
     * @returns {Promise} 案件详情Promise
     */
    getCaseDetail: (id) =>
        http.get(`/cases/${id}`)
            .then(res => handleSuccess(res, '获取案件详情成功'))
            .catch(error => handleError(
                error,
                '获取案件详情失败',
                '案件可能不存在或您没有查看权限'
            )),

    /**
     * 创建案件
     * @param {Object} data - 案件数据
     * @param {String} data.caseName - 案件名称
     * @param {String} data.caseType - 案件类型
     * @param {String} data.applicant - 申请人
     * @param {String} data.phone - 联系电话
     * @param {String} data.address - 地址
     * @param {String} data.description - 描述
     * @param {String} data.content - 内容
     * @param {Array} [data.attachments] - 附件列表
     * @returns {Promise} 创建结果Promise
     */
    createCase: (data) =>
        http.post('/createCases', data)
            .then(res => handleSuccess(res, '案件创建成功'))
            .catch(error => handleError(
                error,
                '案件创建失败',
                '请检查表单数据是否完整有效'
            )),

    /**
     * 更新案件
     * @param {String|Number} id - 案件ID
     * @param {Object} data - 更新数据
     * @returns {Promise} 更新结果Promise
     */
    updateCase: (id, data) =>
        http.put(`/updateCases/${id}`, data)
            .then(res => handleSuccess(res, '案件更新成功'))
            .catch(error => handleError(
                error,
                '案件更新失败',
                '请检查更新数据或刷新重试'
            )),

    /**
     * 删除案件
     * @param {String|Number} id - 案件ID
     * @returns {Promise} 删除结果Promise
     */
    deleteCase: (id) =>
        http.delete(`/deleteCases/${id}`)
            .then(res => handleSuccess(res, '案件删除成功'))
            .catch(error => handleError(
                error,
                '案件删除失败',
                '您可能没有操作权限或案件状态不允许删除'
            )),

    /**
     * 提交案件审批
     * @param {String|Number} id - 案件ID
     * @param {String} [comment] - 提交说明
     * @returns {Promise} 提交结果Promise
     */
    submitForReview: (id, comment) =>
        http.post(`/updateCases/${id}/submit`, { comment })
            .then(res => handleSuccess(res, '案件提交审批成功'))
            .catch(error => handleError(
                error,
                '提交审批失败',
                '请确保案件状态允许提交审批'
            )),

    /**
     * 导出案件数据
     * @param {Object} params - 导出参数
     * @param {Array} [params.ids] - 案件ID列表
     * @param {String} [params.format=xlsx] - 导出格式
     * @returns {Promise} 导出结果Promise
     */
    exportCases: (params) =>
        http.get('/exportCases', {
            params,
            responseType: 'blob'
        })
            .then(res => {
                // 创建文件下载
                const url = window.URL.createObjectURL(new Blob([res.data]))
                const link = document.createElement('a')
                link.href = url
                link.setAttribute('download', `案件数据-${new Date().toISOString().slice(0,10)}.${params.format || 'xlsx'}`)
                document.body.appendChild(link)
                link.click()
                return handleSuccess(null, '案件导出成功')
            })
            .catch(error => handleError(
                error,
                '导出失败',
                '导出过程中发生错误，请重试'
            ))
}